package com.cctc.juc.demo.Bitc.Tmp.BThreadPool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SingleThreadExecutorDemo {

    /**
     * 线程等待与通知（二）：子任务需要串行化执行，保证所有子任务按照指定的顺序（FIFO 或者优先级）依次执行。
     * - Executors.newCachedThreadPool：创建一个可缓存的线程池，如果线程池的大小超过了需要，可以灵活回收空闲线程，如果
     * 没有可回收线程，则新建线程。
     * - Executors.newFixedThreadPool：创建一个定长的线程池，可以控制线程的最大并发数，超出的线程会在队列中等待。
     * - Executors.newScheduledThreadPool：创建一个定长的线程池，支持定时、周期性的任务执行。
     * - Executors.newSingleThreadExecutor: 创建一个单线程化的线程池，使用一个唯一的工作线程执行任务，保证所有任务按照指
     * 定顺序（先入先出或者优先级）执行。
     * - Executors.newSingleThreadScheduledExecutor:创建一个单线程化的线程池，支持定时、周期性的任务执行。
     * - Executors.newWorkStealingPool：创建一个具有并行级别的 work-stealing 线程池。
     * 其中，Executors.newWorkStealingPool 方法是 Java 8 中新增的创建线程池的方法，它能够为线程池设置并行级别，具有更高的并发度和性能。
     * 除了此方法外，其他创建线程池的方法本质上调用的是 ThreadPoolExecutor 类的构造方法。
     */

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> print("A"));
        Thread t2 = new Thread(() -> print("B"));
        Thread t3 = new Thread(() -> print("C"));

        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(t1);
        executorService.execute(t2);
        executorService.execute(t3);
        executorService.shutdown();
    }

    private static void print(String name) {
        System.out.println(name);
    }

}
